﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using Manager.App_Code;
using Manager.Common;
using System.Linq;
using Manager.App_Code.REPORTS;
using Manager.ViewModels;

namespace Manager.FormAdd_Edit
{
    public partial class frm_InHoaDon : DevExpress.XtraEditors.XtraForm
    {
        NewPearl_HotelDataContext db = new NewPearl_HotelDataContext();
        List<ThongKeCheckOut> lstThongKeCheckOut = null;

        public frm_InHoaDon()
        {
            InitializeComponent();
            lstThongKeCheckOut = new List<ThongKeCheckOut>();
            dateTuNgay.DateTime = DateTime.Now;
            dateDenNgay.DateTime = DateTime.Now;
        }        

        private void frm_InHoaDon_Load(object sender, EventArgs e)
        {
            SearchCheckOut(dateTuNgay.DateTime, dateDenNgay.DateTime);
        }

        private void btnIn_Click(object sender, EventArgs e)
        {
            int index = gridview_CheckOut.FocusedRowHandle;
            var thongKeCheckOut = gridview_CheckOut.GetRow(index) as ThongKeCheckOut;
            if (thongKeCheckOut == null)
                return;
            var checkOut = db.CheckOuts.SingleOrDefault(t => t.CheckOutId == thongKeCheckOut.CheckOutId);

            var phieuDangKy = db.PhieuDangKyPhongs.SingleOrDefault(t => t.MaPhieu == checkOut.MaPhieuDangKy);
            var gioVao = phieuDangKy.GioVao + ":" + phieuDangKy.PhutVao;
            var gioRa = checkOut.GioRa + ":" + checkOut.PhutRa;
            var tienCoc = phieuDangKy.TraTruoc.Value;
            var maTienTe = phieuDangKy.TienTe;
            var nguoiLapPhieu = phieuDangKy.NguoiDung1;
            RP_HoaDonTraPhong rp = new RP_HoaDonTraPhong(checkOut, tienCoc, maTienTe, gioVao, gioRa, Variables.NguoiDung, nguoiLapPhieu);
            var lstPhuThuDichVu = db.PhuThuDichVus.Where(t => t.MaPhieuDangKy == checkOut.MaPhieuDangKy).ToList();
            var lstDichVuViewModel = new List<DichVuViewModel>();
            var dic = new Dictionary<double?, DichVuViewModel>();
            foreach (var chiTiet in checkOut.ChiTiet_CheckOuts)
            {
                DichVuViewModel vm = null;
                if (dic.ContainsKey(chiTiet.GiaTien))
                    vm = dic[chiTiet.GiaTien];
                if (vm == null)
                {
                    vm = new DichVuViewModel();
                    vm.TuNgay = chiTiet.NgayDen.Value.ToString("dd/MM/yyyy");
                    vm.DenNgay = chiTiet.NgayDi.Value.ToString("dd/MM/yyyy");
                    vm.TenDichVu = "Tiền phòng từ ngày " + vm.TuNgay + " đến ngày " + vm.DenNgay;
                    vm.GiaDV = chiTiet.GiaTien;
                    vm.strGiaDV = CommonFunction.AddSeparator(chiTiet.GiaTien.Value);
                    vm.DonViTienTe = chiTiet.MaTienTe;
                    vm.SoLuong = 1;
                    vm.ThanhTien = vm.GiaDV;
                    vm.ThanhTienVND = vm.GiaDV.Value * chiTiet.TienTe.TyGiaThamKhao.Value;
                    dic.Add(chiTiet.GiaTien, vm);
                }
                else
                {
                    vm.DenNgay = chiTiet.NgayDi.Value.ToString("dd/MM/yyyy");
                    vm.TenDichVu = "Tiền phòng từ ngày " + vm.TuNgay + " đến ngày " + vm.DenNgay;
                    vm.SoLuong++;
                    vm.GiaDV += chiTiet.GiaTien;
                    vm.strGiaDV = CommonFunction.AddSeparator(vm.GiaDV.Value);
                }                
            }
            lstDichVuViewModel.AddRange(dic.Values.ToList());
            foreach (var phuThu in lstPhuThuDichVu)
            {
                var vm = new DichVuViewModel();
                vm.MaPhuThu = phuThu.MaPhuThu;
                vm.TenDichVu = phuThu.TenDichVu;
                vm.GiaDV = phuThu.GiaTien;
                vm.strGiaDV = CommonFunction.AddSeparator(phuThu.GiaTien.Value);
                vm.SoLuong = phuThu.SoLuong.Value;
                vm.DonViTienTe = phuThu.MaTienTe;
                vm.ThanhTien = phuThu.GiaTien.Value * phuThu.SoLuong.Value;
                vm.ThanhTienVND = phuThu.GiaTien.Value * phuThu.SoLuong.Value * phuThu.TienTe.TyGiaThamKhao.Value;

                lstDichVuViewModel.Add(vm);
            }
            rp.DataSource = lstDichVuViewModel;
            rp.BindData();
            rp.ShowPreview();
        }

        private void btnFind_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(dateTuNgay.Text) || string.IsNullOrEmpty(dateDenNgay.Text))
            {
                MessageBox.Show("Vui lòng chọn từ ngày - đến ngày!");
                return;
            }
            if (dateTuNgay.DateTime > dateDenNgay.DateTime)
            {
                MessageBox.Show("Từ ngày không được lớn hơn đến ngày!");
                return;
            }
            SearchCheckOut(dateTuNgay.DateTime, dateDenNgay.DateTime);
        }

        public void SearchCheckOut(DateTime tuNgay, DateTime denNgay)
        {
            if (lstThongKeCheckOut.Count > 0)
                lstThongKeCheckOut.Clear();
            var lstCheckOut = db.CheckOuts.Where(t => tuNgay.Date <= t.NgayCheckOut.Value.Date && t.NgayCheckOut.Value.Date <= denNgay.Date).ToList();
            if (lstCheckOut.Count == 0)
                return;
            foreach (var checkOut in lstCheckOut)
            {
                var thongKeCheckOut = new ThongKeCheckOut();
                thongKeCheckOut.CheckOutId = checkOut.CheckOutId;
                thongKeCheckOut.strNgayTra = checkOut.NgayCheckOut.Value.ToString("dd/MM/yyyy");
                thongKeCheckOut.strTongTienTraVND = CommonFunction.AddSeparator(checkOut.TienThanhToanVND.Value);
                thongKeCheckOut.strTongTienTraUSD = CommonFunction.AddSeparator(checkOut.TienThanhToanUSD.Value);
                thongKeCheckOut.MaPhong = checkOut.MaPhong;

                lstThongKeCheckOut.Add(thongKeCheckOut);
            }
            grid_CheckOut.DataSource = null;
            grid_CheckOut.DataSource = lstThongKeCheckOut;
        }
    }
}